package com.sudichina.sudichina.pay.alipay;


import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.widget.Toast;

import com.alipay.sdk.app.PayTask;
import com.sudichina.sudichina.MyApp;
import com.sudichina.sudichina.pay.L;
import com.sudichina.sudichina.pay.OnPayListener;
import com.sudichina.sudichina.pay.PayInfo;

import java.util.Map;

public class AlipayHelper {

    private static final String TAG = AlipayHelper.class.getName();

    public interface OnPayResultListener {
        public void onPayResult(String code, String msg);
    }

    protected static final int RQF_PAY = 0;
    private Activity activity;
    private String payInfo;

    private OnPayListener onPayResultListener;

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {

            switch (msg.what) {
                case RQF_PAY:


                    if (onPayResultListener != null) {
                        PayResult payResult = new PayResult((Map<String, String>) msg.obj);

                       // Result result = new Result((String) msg.obj);
                        /**
                         对于支付结果，请商户依赖服务端的异步通知结果。同步通知结果，仅作为支付结束的通知。
                         */
                        String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                        String resultStatus = payResult.getResultStatus();
                        // 判断resultStatus 为9000则代表支付成功
                        if (TextUtils.equals(resultStatus, "9000")) {
                            // 该笔订单是否真实支付成功，需要依赖服务端的异步通知。
                            Toast.makeText(MyApp.getContext(), "支付成功", Toast.LENGTH_SHORT).show();
                            onPayResultListener.onPaySuccess();
                        } else {
                            // 该笔订单真实的支付结果，需要依赖服务端的异步通知。
                            Toast.makeText(MyApp.getContext(), "支付失败", Toast.LENGTH_SHORT).show();
                            onPayResultListener.onPayFail(resultStatus,
                                    "网络异常，请刷新我的订单再试");
                        }

                            return;


                    }

//				if (onPayResultListener !=null) {
//
//					PayResult payResult = new PayResult((String) msg.obj);
//					
//					// 支付宝返回此次支付结果及加签，建议对支付宝签名信息拿签约时支付宝提供的公钥做验签
//					String resultInfo = payResult.getResult();
//					
//					String resultStatus = payResult.getResultStatus();
//
//					// 判断resultStatus 为“9000”则代表支付成功，具体状态码代表含义可参考接口文档
//					if (TextUtils.equals(resultStatus, "9000")) {
//						onPayResultListener.onPaySuccess(resultStatus, resultInfo);
//					} else {
//						// 判断resultStatus 为非“9000”则代表可能支付失败
//						// “8000”代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认，最终交易是否成功以服务端异步通知为准（小概率状态）
////						支付结果确认中
//						if (TextUtils.equals(resultStatus, "8000")) {
//							onPayResultListener.onPaySuccess(resultStatus, resultInfo);	 
//
////						支付失败
//						} else {
//							onPayResultListener.onPayFail(resultStatus, resultInfo);
//						}
//					}
//					break;
//					
//					
//				}

                    break;

                default:
                    break;
            }
        }

    };

    public void setOnlieMode(boolean isOnlieMode) {

    }


    public void pay(final Activity activity, PayInfo info,
                    OnPayListener l) {

        this.activity = activity;
        this.onPayResultListener = l;

        PayUrlGenerator generator = new PayUrlGenerator(info);
        payInfo = generator.generatePayUrl();

        new Thread(new Runnable() {

            @Override
            public void run() {

                activity.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        if (null != onPayResultListener) {
                            onPayResultListener.onStartPay();
                        }
                    }
                });

                PayTask aliPay = new PayTask(activity);
                // 设置为沙箱模式，不设置默认为线上环境�?
                // TODO: 2017/3/21 设置沙箱环境

                //EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);

                System.out.println("qingqiu de canshu :"+payInfo);

                Map<String, String> stringStringMap = aliPay.payV2(payInfo, true);


                L.i(AlipayHelper.class.getName(), "pay result :" + stringStringMap);
                Message msg = new Message();
                msg.what = RQF_PAY;
                msg.obj = stringStringMap;
                handler.sendMessage(msg);
            }
        }).start();
    }
}
